package br.com.danilloguimaraes.internacionalizacao;

import java.text.DateFormat;
import java.text.NumberFormat;
import java.util.Date;
import java.util.Locale;
import java.util.ResourceBundle;

/**
 * Hello world!
 *
 */
public class App 
{
    
    private static final String CARRO = "carro";
    
    public static void main( String[] args )
    {
        
        Locale pt_BR = new Locale("pt", "BR");
        Locale sp_SP = new Locale("sp", "SP");
        Locale defau1t = new Locale("xx", "Nao_existe_resource");
        
        ResourceBundle resources = loadResource(pt_BR);
        
        //Carro em portgues = carro
        printMessage("Carro em portugues:", pt_BR);
        //Carro em espanhol = coche
        printMessage("Carro em espanhol:", sp_SP);
        //Carro se passarmos um locale que não existe recursos definidos = car
        printMessage("Carro em idioma desconhecido:", defau1t);
        
        Date dataAtual = new Date();
        printDate("Data no formato do Brasil:", dataAtual, pt_BR);
        printDate("Data no formato do Japao:", dataAtual, Locale.JAPAN);
        printDate("Data no formato da China:", dataAtual, Locale.CHINA);
        printDate("Loclae inexistente:", dataAtual, defau1t);
        
        printNumber("100000000,55 no Brasil:", pt_BR);
        printNumber("100000000,55 nos EUA:", Locale.US);
        printNumber("100000000,55 no Japão:", Locale.JAPAN);
        
        printCurrency("100,10 no Brasil:", pt_BR);
        printCurrency("100,10 nos EUA:", Locale.US);
        printCurrency("100,10 no Japão:", Locale.JAPAN);
        
        printPercent("10,10% no Brasil:", pt_BR);
        printPercent("10,10% nos EUA:", Locale.US);
        printPercent("10,10% no Japão:", Locale.JAPAN);
        
        NumberFormat cf = NumberFormat.getCurrencyInstance();
        NumberFormat pf = NumberFormat.getPercentInstance();
        
    }

    private static void printMessage(String mens, Locale locale) {
        StringBuilder sb = new StringBuilder();
        sb.append(mens).
                append(" ").
                append(loadResource(locale).getString(CARRO));
        System.out.println(sb.toString());
    }
    
    private static void printDate(String mens, Date date, Locale locale) {
        StringBuilder sb = new StringBuilder();
        sb.append(mens).
                append(" ").
                append(DateFormat.getDateInstance(DateFormat.MEDIUM, locale).
                    format(date));
        System.out.println(sb.toString());
    }
    
    private static void printNumber(String mens, Locale locale){
        StringBuilder sb = new StringBuilder();
        sb.append(mens).append(" ").append(NumberFormat.getNumberInstance(locale).format(100000000.55));
        System.out.println(sb.toString());
    }
    
    private static void printCurrency(String mens, Locale locale){
        StringBuilder sb = new StringBuilder();
        sb.append(mens).append(" ").append(NumberFormat.getCurrencyInstance(locale).format(100.10));
        System.out.println(sb.toString());
    }
    
    private static void printPercent(String mens, Locale locale){
        StringBuilder sb = new StringBuilder();
        sb.append(mens).append(" ").append(NumberFormat.getPercentInstance(locale).format(10.10));
        System.out.println(sb.toString());
    }
    

    /**
     * Carrega as mensagem para determinada {@link Locale}
     * @param loc
     * @return 
     */
    private static ResourceBundle loadResource(Locale loc) {
        return ResourceBundle.getBundle("resources", loc);
    }
}
